import { useQuery } from "@apollo/react-hooks"; import gql from "graphql-tag"; import { NextPage } from "next"; import Link from "next/link"; import { useRouter } from "next/router"; import Head from "next/head"; import React from "react"; import ProgressionTable from "~/components/progression-table"; import LeaderboardTable from "~/components/leaderboard-table"; import * as schema from "~/components/schema"; import styles from "~/components/styles.module.scss"; import { withApollo, DEBUG } from "~/components/hooks/with-apollo"; import useProgressIndicator from "~/components/hooks/use-nprogress"; import LoadingBlock from "~/components/loading-block"; const GamePage: NextPage = () => { const router = useRouter(); const { loading, error, data } = useQuery(GetGamePage, { variables: { slug: router.query.game }, }); useProgressIndicator(loading); if (error || !data) { return <>{error ? JSON.stringify(error) : }; } const game = data?.game; if (!game) { return <>game not found; } return (
{game.name} Speedruns

{game.name}

{game.gameCategories.map(category => (

{category.name}

Progress

Leaderboard

))} {game.levelCategories.map(levelCategory => (

{levelCategory.name}

Progress

{levelCategory.levels.map(({ level, leaderboard, progression }) => (

{level.name}

Progress

Leaderboard

))}
))}
); }; export default withApollo(GamePage); const GetGamePagePreview = gql` query GetGamePagePreview($slug: String!) { game(slug: $slug) { id srcSlug name } } `; const GameRun = gql` fragment GameRun on Run { id srcId timeMs videos category { id srcId name } level { id srcId srcSlug name } date players { name isGuest user { id srcId slug } } } `; const GameLeaderboardRun = gql` ${GameRun} fragment GameLeaderboardRun on LeaderboardRun { rank isTied tiedRank run { id srcId timeMs videos category { id srcId name } level { id srcId srcSlug name } date players { name isGuest user { id srcId slug } } } } `; const GetGamePage = gql` ${GameRun} ${GameLeaderboardRun} query GetGamePage($slug: String!) { game(slug: $slug) { id srcId slug srcSlug name timingMethod gameCategories { id srcId srcSlug name leaderboard(limit: 32) { ...GameLeaderboardRun } progression { progressMs run { ...GameRun } leaderboardRun { ...GameLeaderboardRun } } } levelCategories { id srcId srcSlug name leaderboard(limit: 32) { ...GameLeaderboardRun } progression { progressMs run { ...GameRun } leaderboardRun { ...GameLeaderboardRun } } levels { level { id srcId srcSlug name } leaderboard(limit: 32) { ...GameLeaderboardRun } progression { progressMs run { ...GameRun } leaderboardRun { ...GameLeaderboardRun } } } } } } `;